#ifndef UHM_UTIL_ID_INT_HXX
#define UHM_UTIL_ID_INT_HXX

#define UHM_UTIL_ID_INT_UNROLL 2


namespace uhm {

  // Integer 
  template<Int_ N> class ID_Int_ : public ID_<Int_, N>{
  private:
  protected:
  public:
    ID_Int_() { for (Int_ i=0;i<N;++i) this->_id[i] = 0; }
    ID_Int_(const ID_Int_ &b) { for (int i=0;i<N;++i) this->_id[i] = b._id[i]; }
    virtual ~ID_Int_() { }

    virtual Int_ diff(const ID_Int_ &b) const {
#pragma unroll(UHM_UTIL_ID_INT_UNROLL)
      for (Int_ i=0;i<N;++i) {
        Int_ r_val = (this->get_id(i) - b.get_id(i));
        if (r_val) return r_val;
      }
      return 0;
    }
    /*
    virtual Bool_ operator<(const ID_Int_ &b) const  {
      Int_ r_val = this->diff(b);
      return (r_val <0);
    }
    */
  };

}


#endif
